/**
 * 260. 只出现一次的数字 III
 * https://leetcode.cn/problems/single-number-iii/description/
 */
class Solution {
    public int[] singleNumber(int[] nums) {
        //先找出两个只出现一次的数是异或和
        int xoy = 0;
        for(int num : nums) {
            xoy ^= num;
        }
        //找出异或和二进制中的右边的第一个1
        int lowbit = xoy & (-xoy);
        int x = 0, y = 0;
        for(int num : nums) {
            //nums[lowbit]为1
            if((num & lowbit) > 0) x ^= num;
            //nums[lowbit]为0
            else y ^= num;
        }
        int[] ret = new int[2];
        ret[0] = x;
        ret[1] = y;
        return ret;
    }
}